package com.jlnk.androidfmc;

import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.Toast;

import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;

import com.bumptech.glide.Glide;
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
import com.jlnk.androidfmc.entity.Product;
import com.jlnk.androidfmc.entity.CartItem;

import java.lang.reflect.Type;
import java.util.ArrayList;
import java.util.List;

public class ShoppingCartActivity extends AppCompatActivity {

    private RecyclerView recyclerView;
    private ImageView ivCheckedAll;
    private TextView tvCheckedAll,tvTotal,tvSettlement,tvEdit;
    private LinearLayout layEdit;
    private ShoppingCartAdapter adapter; // 注意这里去掉了 static 修饰符
    private List<CartItem> cartItems = new ArrayList<>();
    private boolean isEditMode = false;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_shopping_cart);

        initViews(); // 初始化视图
        restoreCartItems(); // 先恢复购物车数据
        initAdapter(); // 然后初始化适配器
        setupClickListeners(); // 设置点击事件
        updateCheckAllState(); // 更新全选状态
        updateTotalAmount(); // 更新总金额
        initBottomEditClickListeners(); // 初始化底部编辑点击事件

        handleIntentProduct(); // 处理从其他活动传递过来的商品
    }

    private void restoreCartItems() {
        SharedPreferences sharedPreferences = getSharedPreferences("CartPrefs", MODE_PRIVATE);
        String cartItemsJson = sharedPreferences.getString("cartItems", null);
        if (cartItemsJson != null) {
            cartItems = deserializeCartItems(cartItemsJson);
        }
        // 此处确保 cartItems 已填充数据后再初始化 adapter
        if (adapter == null) {
            initAdapter();
        }
    }
    private List<CartItem> deserializeCartItems(String cartItemsJson) {
        Gson gson = new Gson();
        Type type = new TypeToken<ArrayList<CartItem>>(){}.getType();
        return gson.fromJson(cartItemsJson, type);
    }

    private void initAdapter() {
        // 只在 adapter 为 null 时初始化
        if (adapter == null) {
            adapter = new ShoppingCartAdapter(cartItems);
            recyclerView.setLayoutManager(new LinearLayoutManager(this));
            recyclerView.setAdapter(adapter);
        }
    }
    private void initViews() {
        recyclerView = findViewById(R.id.rv_store);
        ivCheckedAll = findViewById(R.id.iv_checked_all);
        tvCheckedAll = findViewById(R.id.tv_checked_all);
        tvTotal = findViewById(R.id.tv_total);
        tvSettlement = findViewById(R.id.tv_settlement);
        tvEdit = findViewById(R.id.tv_edit);
        layEdit = findViewById(R.id.lay_edit);
    }

    private void setupClickListeners() {
        // 检查 ivCheckedAll 是否已被初始化，然后设置点击事件
        if (ivCheckedAll != null) {
            ivCheckedAll.setOnClickListener(v -> {
                // 切换所有商品的选中状态
                boolean newSelectedState = !areAllItemsSelected();
                for (CartItem item : cartItems) {
                    item.setSelected(newSelectedState);
                }
                adapter.notifyDataSetChanged(); // 刷新适配器
                updateTotalAmount(); // 更新总金额
                updateCheckAllState(); // 更新全选按钮的状态
            });
        }

        // 为结算按钮设置点击事件
        tvSettlement.setOnClickListener(v -> {
            settle();
        });

        // 为编辑按钮设置点击事件
        tvEdit.setOnClickListener(v -> {
            toggleEditMode(); // 切换编辑模式
        });

        // 如果 layEdit 存在，为其子视图设置点击事件
        if (layEdit != null) {
            TextView tvShareGoods = findViewById(R.id.tv_share_goods);
            TextView tvCollectGoods = findViewById(R.id.tv_collect_goods);
            TextView tvDeleteGoods = findViewById(R.id.tv_delete_goods);

            // 分享宝贝点击事件
            tvShareGoods.setOnClickListener(v -> shareGoods());

            // 移到收藏夹点击事件
            tvCollectGoods.setOnClickListener(v -> collectGoods());

            // 删除点击事件
            tvDeleteGoods.setOnClickListener(v -> deleteGoods());
        }

        // 其他可能的点击事件设置...
    }

    private void handleIntentProduct() {
        Intent intent = getIntent();
        if (intent != null) {
            Product product = intent.getParcelableExtra("ADD_TO_CART");
            if (product != null) {
                addItemToCart(product);
            } else {
                Log.e("ShoppingCart", "No product in intent or product is null");
                // 处理没有产品对象的情况
            }
        }
    }
    private void addItemToCart(Product product) {
        CartItem existingItem = findExistingCartItem(product.getName());
        if (existingItem != null) {
            existingItem.setQuantity(existingItem.getQuantity() + 1);
            adapter.notifyItemChanged(cartItems.indexOf(existingItem));
        } else {
            CartItem newItem = new CartItem(product);
            cartItems.add(newItem);
            adapter.notifyItemInserted(cartItems.size() - 1);
        }
        // 刷新适配器数据源
        adapter.setCartItems(cartItems);
        // 更新总价和全选状态
        updateTotalAmount();
        updateCheckAllState();
        // 保存购物车数据到 SharedPreferences
        saveCartItems();
    }
    private void saveCartItems() {
        SharedPreferences sharedPreferences = getSharedPreferences("CartPrefs", MODE_PRIVATE);
        SharedPreferences.Editor editor = sharedPreferences.edit();
        Gson gson = new Gson();
        String json = gson.toJson(cartItems);
        editor.putString("cartItems", json);
        editor.apply();
    }
    private CartItem findExistingCartItem(String name) {
        for (CartItem item : cartItems) {
            if (item.getName().equals(name)) {
                return item;
            }
        }
        return null; // 如果没有找到，返回 null
    }
    private void initBottomEditClickListeners() {
        LinearLayout layEdit = findViewById(R.id.lay_edit);
        if (layEdit != null) {
            TextView tvShareGoods = findViewById(R.id.tv_share_goods);
            TextView tvCollectGoods = findViewById(R.id.tv_collect_goods);
            TextView tvDeleteGoods = findViewById(R.id.tv_delete_goods);

            // 分享宝贝点击事件
            tvShareGoods.setOnClickListener(v -> shareGoods());

            // 移到收藏夹点击事件
            tvCollectGoods.setOnClickListener(v -> collectGoods());

            // 删除点击事件
            tvDeleteGoods.setOnClickListener(v -> deleteGoods());
        }
    }

    private void shareGoods() {
        // 实现分享宝贝的逻辑
        Toast.makeText(this, "分享宝贝", Toast.LENGTH_SHORT).show();
        // 这里可以添加实际的分享代码，例如使用Intent启动分享对话框
    }

    private void collectGoods() {
        // 实现移到收藏夹的逻辑
        Toast.makeText(this, "移到收藏夹", Toast.LENGTH_SHORT).show();
        // 这里可以添加实际的收藏逻辑，例如更新数据库或用户界面
    }

    private void deleteGoods() {
        if (isEditMode) {
            // 在编辑模式下，删除所有选中的商品项
            for (int i = cartItems.size() - 1; i >= 0; i--) {
                if (cartItems.get(i).isSelected()) {
                    cartItems.remove(i);
                    adapter.notifyItemRemoved(i); // 通知适配器移除项
                }
            }
            // 更新总价
            updateTotalAmount();
        } else {
            Toast.makeText(this, "请先进入编辑模式", Toast.LENGTH_SHORT).show();
        }
    }
    private boolean isAnyItemSelected() {
        for (CartItem item : cartItems) {
            if (item.isSelected()) {
                return true;
            }
        }
        return false;
    }
    @Override
    protected void onPause() {
        super.onPause();
        saveCartItems();
    }


    @Override
    protected void onSaveInstanceState(@NonNull Bundle outState) {
        super.onSaveInstanceState(outState);
        saveCartItems();
    }
    private void toggleEditMode() {
        isEditMode = !isEditMode;
        layEdit.setVisibility(isEditMode ? LinearLayout.VISIBLE : LinearLayout.GONE);
        tvSettlement.setVisibility(isEditMode ? TextView.GONE : TextView.VISIBLE);
        tvTotal.setVisibility(isEditMode ? TextView.GONE : TextView.VISIBLE);
        TextView tvCombo = findViewById(R.id.tx_sum);
        tvCombo.setVisibility(isEditMode ? TextView.GONE : TextView.VISIBLE);
        // 更新其他UI元素
        updateTotalAmount();
    }

    private void updateCheckAllState() {
        if (areAllItemsSelected()) {
            // 如果所有商品项都被选中
            tvCheckedAll.setText("取消全选");
            ivCheckedAll.setImageResource(R.drawable.ic_checked); // 设置为选中的图标
        } else {
            // 如果不是所有商品项都被选中
            tvCheckedAll.setText("全选");
            ivCheckedAll.setImageResource(R.drawable.ic_check); // 设置为未选中的图标
        }
    }
    private boolean areAllItemsSelected() {
        for (CartItem item : cartItems) {
            if (!item.isSelected()) {
                return false;
            }
        }
        return true;
    }


    private void updateTotalAmount() {
        if (tvTotal != null) {
            // 如果 tvTotal 已经被初始化，计算并显示总金额
            double totalAmount = calculateTotalAmount(); // 计算总金额的逻辑
            tvTotal.setText(String.format("￥%.2f", totalAmount));
        } else {
            // 如果 tvTotal 没有被初始化，记录错误日志并提示用户
            Log.e("ShoppingCart", "Total amount view is not initialized");
            Toast.makeText(this, "Error: Total amount view is not initialized.", Toast.LENGTH_LONG).show();
            finish(); // 结束活动
        }
    }

    // 这个方法应该包含计算总金额的逻辑
    private double calculateTotalAmount() {
        // 遍历 cartItems 列表，计算选中商品的总价
        double total = 0;
        for (CartItem item : cartItems) {
            if (item.isSelected()) {
                total += item.getPrice() * item.getQuantity();
            }
        }
        return total;
    }
    private void settle() {
        // 计算选中的商品项并创建一个列表
        List<CartItem> selectedItems = new ArrayList<>();
        for (CartItem item : cartItems) {
            if (item.isSelected()) {
                selectedItems.add(item);
            }
        }

        if (selectedItems.isEmpty()) {
            Toast.makeText(this, "请选择要结算的商品", Toast.LENGTH_SHORT).show();
        } else {
            // 序列化选中的商品项列表
            Gson gson = new Gson();
            String selectedItemsJson = gson.toJson(selectedItems);

            // 创建Intent启动PaymentActivity，并传递选中的商品项列表和总金额
            Intent intent = new Intent(ShoppingCartActivity.this, PaymentActivity.class);
            intent.putExtra("SELECTED_ITEMS_JSON", selectedItemsJson);
            intent.putExtra("TOTAL_AMOUNT", calculateTotalAmount(selectedItems));
            startActivity(intent);
        }
    }

    private double calculateTotalAmount(List<CartItem> items) {
        double total = 0;
        for (CartItem item : items) {
            total += item.getPrice() * item.getQuantity();
        }
        return total;
    }

    public class ShoppingCartAdapter extends RecyclerView.Adapter<ShoppingCartAdapter.CartViewHolder> {

        private List<CartItem> cartItems;

        public ShoppingCartAdapter(List<CartItem> cartItems) {
            this.cartItems = cartItems;
        }
        public void setCartItems(List<CartItem> newCartItems) {
            this.cartItems = newCartItems;
            notifyDataSetChanged(); // 通知数据发生变化
        }
        @NonNull
        @Override
        public CartViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
            View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_good, parent, false);
            return new CartViewHolder(view);
        }

        public void onBindViewHolder(@NonNull final CartViewHolder holder, int position) {
            CartItem item = cartItems.get(position);
            holder.tvGoodName.setText(item.getName());
            holder.tvGoodsPrice.setText(String.format("￥%.2f", item.getPrice()));
            holder.tvGoodsNum.setText(String.valueOf(item.getQuantity()));
            holder.ivCheckedGoods.setImageResource(item.isSelected() ? R.drawable.ic_checked : R.drawable.ic_check);

            // 确保 item.getImagePath() 返回的是有效的图片路径
            // 使用 Glide 加载图片，确保上下文正确
            Glide.with(ShoppingCartActivity.this) // 使用外部类的实例（即 Activity）作为上下文
                    .load(item.getImagePath()) // 加载图片路径
                    .into(holder.ivItemImage); // 将图片设置到对应的 ImageView

            // 设置点击事件，切换商品项的选中状态
            holder.itemView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    CartItem item = cartItems.get(holder.getAdapterPosition());
                    item.setSelected(!item.isSelected());
                    // 根据新的选中状态更新图片
                    holder.ivCheckedGoods.setImageResource(item.isSelected() ? R.drawable.ic_checked : R.drawable.ic_check);
                    // 通知当前项数据变化
                    notifyItemChanged(holder.getAdapterPosition());
                    // 更新总价
                    ShoppingCartActivity.this.updateTotalAmount();
                }
            });
            // 减少数量按钮的事件
            holder.tvReduceGoodsNum.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    if (item.getQuantity() > 1) {
                        item.setQuantity(item.getQuantity() - 1);
                        holder.tvGoodsNum.setText(String.valueOf(item.getQuantity()));
                        notifyItemChanged(holder.getAdapterPosition());
                        ShoppingCartActivity.this.updateTotalAmount();
                    }
                }
            });

            // 增加数量按钮的事件
            holder.tvIncreaseGoodsNum.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    item.setQuantity(item.getQuantity() + 1);
                    holder.tvGoodsNum.setText(String.valueOf(item.getQuantity()));
                    notifyItemChanged(holder.getAdapterPosition());
                    ShoppingCartActivity.this.updateTotalAmount();
                }
            });

        }

        @Override
        public int getItemCount() {
            return cartItems.size();
        }

        public void setEditMode(boolean isEditMode) {
            if (isEditMode) {
                // 在编辑模式下，可以选择或取消选择所有商品
                boolean newSelectedState = !isAnyItemSelected();
                for (CartItem item : cartItems) {
                    item.setSelected(newSelectedState);
                }
            } else {
                // 在非编辑模式下，不改变商品的选中状态
            }
            notifyDataSetChanged(); // 刷新所有item以更新勾选状态
            ShoppingCartActivity.this.updateTotalAmount(); // 更新总价
        }

        // 检查是否有商品项被选中
        private boolean anyItemSelected() {
            for (CartItem item : cartItems) {
                if (item.isSelected()) {
                    return true;
                }
            }
            return false;
        }


        public class CartViewHolder extends RecyclerView.ViewHolder {
            public ImageView ivCheckedGoods,ivItemImage;
            public TextView tvGoodName;
            public TextView tvGoodsPrice;
            public TextView tvGoodsNum;
            public TextView tvReduceGoodsNum;
            public TextView tvIncreaseGoodsNum;
            TextView tvDelete;

            public CartViewHolder(@NonNull View itemView) {
                super(itemView);
                ivCheckedGoods = itemView.findViewById(R.id.iv_checked_goods);
                tvGoodName = itemView.findViewById(R.id.tv_good_name);
                tvGoodsPrice = itemView.findViewById(R.id.tv_goods_price);
                tvGoodsNum = itemView.findViewById(R.id.tv_goods_num);
                ivItemImage = itemView.findViewById(R.id.iv_goods); // 绑定图片的 ImageView
                tvReduceGoodsNum = itemView.findViewById(R.id.tv_reduce_goods_num);
                tvIncreaseGoodsNum = itemView.findViewById(R.id.tv_increase_goods_num);
                tvDelete = itemView.findViewById(R.id.tv_delete_goods);
                if (tvDelete != null) {
                    tvDelete.setOnClickListener(v -> {
                        int position = getAdapterPosition();
                        if (position != RecyclerView.NO_POSITION) {
                            // 从列表中移除商品项
                            cartItems.remove(position);
                            // 通知适配器该位置的项已被移除
                            adapter.notifyItemRemoved(position);
                            // 更新总价
                            ShoppingCartActivity.this.updateTotalAmount();
                        }
                    });
                }

            }
        }
    }
}